package com.six.backend.service;

import com.six.backend.pojo.Agenda;
import com.six.backend.pojo.Conference;
import com.six.backend.pojo.SourceMaterial;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @Author: skyler
 * @Date: 2021/11/4 15:25
 */
@Transactional
public interface ConferenceService {
    /**
     * 修改会议信息
     * @param conference 要修改的会议信息
     * @return int
     */
    int alterConference(Conference conference);

    /**
     * 通过会议名称，开始时间，结束时间进行模糊查询会议
     * @param map {会议名称 name，开始时间 startTime，结束时间 endTime} 实现会议名称的模糊查询
     * @return List
     */
    List<Conference> getConference(Map map);

    /**
     * 删除会议
     * @param map {id 会议编号}
     * @return Integer
     */
    Integer deleteConference(Map map);

    /**
     * 新建会议
     * @param conference
     * @return
     */
    Boolean addConference(Conference conference);

    /**
     * 开始会议获取会议全部信息
     * @param id 会议的id
     * @return 会议的全部信息(会议信息、参会人员、主题、议题)
     */
    Conference getConferenceInformation(Integer id);

    /**
     * 查询会议过程记录
     * @param id 会议的id
     * @return 会议过程记录的集合
     */
    List<Agenda> selectAgenda(Integer id);

    /**
     * 查询会议当前会议的素材信息
     * @param id 会议的id号
     * @return 会议素材的集合
     */
    List<SourceMaterial> selectConferenceSourceById(Integer id);

    /**
     * 模糊查询会议素材信息
     * @param id 会议的id
     * @param name 素材的名称
     * @return 查询到素材的集合
     */
    List<SourceMaterial> selectConferenceSourceByName(Integer id, String name);

    /**
     * 开始会议
     * @param conferenceId
     * @return
     */
    Boolean startConference(Integer conferenceId);

    /**
     * 结束会议
     * @param conferenceId
     * @return
     */
    Boolean endConference(Integer conferenceId);

    /**
     * 判断该用户是否是会议主持人
     * @param conferenceId
     * @param account
     * @return
     */
    Boolean isConferenceHost(Integer conferenceId,String account);

    /**
     * 判断当前会议是否正在进行
     * @param conferenceId
     * @return
     */
    Boolean isConferenceRunning(Integer conferenceId);

    void saveMessage(String roomName, String username, String data, Date date);
}
